将单人游戏转换为Unity多人游戏

本文档介绍了使用新的Unity多人联网系统将单人游戏转换为多人游戏的步骤。这里描述的过程是真实游戏实际过程的简化,更高级的版本;它并不总是像这样工作,但它提供了该过程的基本配方。

NetworkManager设置

    • 将一个新的GameObject添加到场景并将其重命名为“NetworkManager”。
    • 将NetworkManager组件添加到“NetworkManager”游戏对象。
    • 将NetworkManagerHUD组件添加到GameObject。这提供了用于管理网络游戏状态的默认UI。

请参阅使用NetworkManager。

玩家预制设置

    • 在游戏中查找玩家GameObject的预制件,或从玩家GameObject创建预制件
    • 将NetworkIdentity组件添加到玩家Prefab
    • 检查NetworkIdentity上的LocalPlayerAuthority框
    • 将playerPrefabNetworkManager的Spawn Info部分设置为玩家预制
    • 如果它存在于场景中,则从场景中移除玩家GameObject实例

有关更多信息,请参阅玩家对象

球员运动

    • 将NetworkTransform组件添加到玩家Prefab
    • 更新输入和控制脚本来尊重 isLocalPlayer
    • 修复相机使用衍生玩家和 isLocalPlayer

例如,该脚本仅处理本地玩家的输入:

        using UnityEngine;
        using UnityEngine.Networking;

        public class Controls : NetworkBehaviour
        {
            void Update()
            {
                if (!isLocalPlayer)
                {
                    // exit from update if this is not the local player
                    return;
                }

                // handle player input for movement
            }
        }

基本玩家游戏状态

    • 使包含重要数据的脚本继承NetworkBehaviours而不是MonoBehaviours
    • 将重要的成员变量放入SyncVars中

请参阅状态同步。

联网行动

    • 将执行重要操作的脚本制作成NetworkBehaviours而不是MonoBehaviours
    • 将执行重要玩家动作的功能更新为命令

请参阅联网的操作。

非玩家GameObjects

修复诸如敌人之类的非玩家预制:

    • 添加NetworkIdentify组件
    • 添加NetworkTransform组件
    • 用NetworkManager注册可重复使用的预制件
    • 用游戏状态和动作更新脚本

生成

    • 潜在地将spawner脚本更改为NetworkBehaviours
    • 将spawners修改为仅在服务器上运行(使用isServer属性或OnStartServer()函数)
    • 调用NetworkServer.Spawn()创建的GameObjects

产生玩家的位置

    • 添加一个新的GameObject并将其放置在玩家的起始位置
    • 将NetworkStartPosition组件添加到新的GameObject中

前厅

    • 创建大厅场景
    • 将新的GameObject添加到场景并将其重命名为“NetworkLobbyManager”。
    • 将NetworkLobbyManager组件添加到新的GameObject中。
    • 配置管理器:
            • 场景
            • 组合屋
            • 产卵

🔚